#ifndef SQLCONNPOOL_H
#define SQLCONNPOOL_H
#include <mysql/mysql.h>
#include <string>
#include <queue>
#include <mutex>
#include <semaphore.h>
#include <thread>
#include "../log/log.h"
//数据库连接池类
class SqlConnPool 
{
public:
    //单例的获取实例的函数
    static SqlConnPool* Instance();
    //获取数据库连接的函数
    MYSQL* GetConn();
    //释放数据库连接的函数
    void FreeConn(MYSQL* conn);
    //获取当前连接池中的连接数量
    int GetFreeConnCount();
    //初始化数据库的连接池
    void Init(const char* host,int port,
              const char* user,const char* pwd,
              const char*dbName,int connSize);
    //关闭数据库连接池
    void ClosePool();
private:  
    //数据库连接池的构造函数
    SqlConnPool();
    //数据库连接池的析构函数
    ~SqlConnPool();
    //数据库连接池的最大连接数量
    int MAX_CONN_;
    //数据库连接池的当前连接数量
    int useCount_;
    //数据库连接池的空闲连接数量
    int freeCount_;
    //数据库连接池的连接队列
    std::queue<MYSQL*> connQue_;
    //数据库连接池的互斥锁
    std::mutex mtx_;
    //数据库连接池的信号量
    sem_t semId_;
};
#endif